package com.mydomain.Bodega;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.Contexts;

@Stateful
@Name("listadoDeOperacion")
@Scope(ScopeType.SESSION)
public class ListadoDeOperacion implements IListadoDeOperacion {

	@In(required = false, value = "#{ingresoItems}")
	private List<InvIngresoItem> ingresoItems = new ArrayList<InvIngresoItem>();

	@In(required = false, value = "#{egresoItems}")
	private List<InvEgresoItem> listadoEgresoItems = new ArrayList<InvEgresoItem>();

	@In(required = false, value = "#{grupoListado.precioU}")
	private BigDecimal varEgresoPrecioUnitario;

	@In(required = false, value = "#{invIngresoHome.instance.ingIva}")
	private BigDecimal ingIva;

	@In(required = false, value = "#{invIngresoHome.instance.ingDescuento}")
	private BigDecimal ingDescuento;

	@In(required = false, value = "#{invEgresoHome.instance.egrDescuento}")
	private BigDecimal egrDescuento= new BigDecimal(0.0);

	@In(required = false, value = "#{invEgresoHome.instance.egrIva}")
	private BigDecimal egrIva;
	
	@PersistenceContext
	EntityManager em;
//DUDO de este metodo
	public BigDecimal getVarTotalDeIngreso() {
		// TODO Auto-generated method stub
		BigDecimal total = new BigDecimal(0);
		if (ingresoItems.size() > 0) {
			Iterator<InvIngresoItem> entries = ingresoItems.iterator();

			while (entries.hasNext()) {
				InvIngresoItem ingresos = entries.next();

				try {
					if (ingresos.getIniCantidad() != null
							&& ingresos.getIniCostoU() != null) {
						total = total.add(ingresos.getIniCantidad().multiply(
								ingresos.getIniCostoU()));
					}
				} catch (Exception e) {
					// TODO: handle exception
					return new BigDecimal(0);
				}
			}
			return total.setScale(
					2,
					total.ROUND_HALF_UP);
		}

		return new BigDecimal(0);
	}

	public BigDecimal getVarTotalDeIVA() {

		try {
			if (this.ingIva != null)
				return this.ingIva.multiply(getVarTotalDeIngreso());

		} catch (Exception e) {

			// TODO: handle exception
			return new BigDecimal(0);
		}
		return new BigDecimal(0);
	}

	public BigDecimal getVarTotalDeDescuento() {

		try {
			if (this.ingDescuento != null)
				return this.ingDescuento.multiply(getVarTotalDeIngreso());

		} catch (Exception e) {

			// TODO: handle exception
			return new BigDecimal(0);
		}
		return new BigDecimal(0);
	}

	public BigDecimal getVarTotal() {
		try {
			if (this.ingDescuento != null && this.ingIva != null)
				return getVarTotalDeDescuento().add(
						getVarTotalDeIngreso().add(getVarTotalDeIVA()));

		} catch (Exception e) {

			// TODO: handle exception
			return new BigDecimal(0);
		}
		return new BigDecimal(0);
	}

	public BigDecimal getVarTotalEgresoNeto() {
		BigDecimal total = new BigDecimal(0);
		if (listadoEgresoItems.size() > 0) {
			Iterator<InvEgresoItem> entries = listadoEgresoItems.iterator();

			while (entries.hasNext()) {
				InvEgresoItem egresos = entries.next();

				try {
					if (egresos.getEgiCantidad() != null) {
						total = total.add(egresos.getEgiCantidad().multiply(
								getCantidadSotck(egresos.getAuxInvItem())));
					}
				} catch (Exception e) {
					// TODO: handle exception
					return new BigDecimal(0);
				}
			}
			return total;
		}
		return new BigDecimal(0);
	}
	public BigDecimal getCantidadSotck(String auxCodigo) {
		if (auxCodigo != null) {
			System.out.println("ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp  " + auxCodigo);
			Subdepartamento usuario = (Subdepartamento) Contexts
					.getSessionContext().get("usuarioLogeo");
			List invItems = em
					.createQuery(
							"select i  from InvItemStock i where  i.iteCodigo = :codigo and i.subdepCodigo = :subdepartamento and i.depCodigo = :departamento")
					.setParameter("codigo", auxCodigo).setParameter(
							"subdepartamento", usuario.getSubdepCodigo())
					.setParameter("departamento",
							usuario.getDepartamento().getDepCodigo())
					.getResultList();
			if (invItems.size() > 0) {
				InvItemStock entidad = (InvItemStock) invItems.get(0);
				return   entidad.getIteCosto();
				
			}
		}
		return new BigDecimal(0.0); 
	}

	
	

	public BigDecimal getVarEgresoTotalDeIngreso(){
		return new BigDecimal(0);
	}
	public BigDecimal getVarEgresoTotalDeIVA(){
		try {
			if (this.egrIva!=null)
				return getVarTotalEgresoNeto().multiply(egrIva);

		} catch (Exception e) {

			// TODO: handle exception
			return new BigDecimal(0);
		}
		return new BigDecimal(0);
	}
	public BigDecimal getVarEgresoTotalDeDescuento(){
		try {
			if (this.egrDescuento != null)
				return this.egrDescuento.multiply(getVarTotalEgresoNeto());

		} catch (Exception e) {

			// TODO: handle exception
			return new BigDecimal(0);
		}

		return new BigDecimal(0);
	}
	public BigDecimal getVarEgresoTotal(){
		try {
			if (this.egrDescuento!= null && this.egrIva != null)
				return getVarEgresoTotalDeIVA().add(
						getVarEgresoTotalDeDescuento().add(getVarTotalEgresoNeto()));

		} catch (Exception e) {

			// TODO: handle exception
			return new BigDecimal(0);
		}
		return new BigDecimal(0);
	}
	
	@Remove
	@Destroy
	public void destroy() {
	}

}
